package com.example.managesystem.service;

import com.example.managesystem.dto.*;
import com.example.managesystem.vo.*;

public interface ItemService {
    /**
     * 项目申报
     * @param
     * @param postItemDTO
     */
    void saveItem(PostItemDTO postItemDTO);

    /**
     * 查看项目详情
     * @param itemId
     * @return
     */
    PostItemVO lookItemDetails(Integer itemId);

    /**
     * 查看项目进展记录
     * @return
     */
    ItemsProgressVO lookItemsProgress();

    /**
     * 立项失败详情
     * @param itemId
     * @return
     */
    SetItemFailureVO setItemFailure(Integer itemId);

    /**
     * 中期检查
     * @return
     */
    MidItermsVO getMidterm();

    /**
     * 提交中期报告
     * @param itemId
     * @return
     */
    SubmitMidtermPaperVO submitMiditemPaper(Integer itemId);

    /**
     * 中期检查失败详情
     * @param itemId
     * @return
     */
    SubmitMidtermFailureVO LookMiditemFailure(Integer itemId);

    /**
     * 中期项目之人员变动
     * @param itemId
     * @return
     */
    MidItemUpdatePeopleMessageVO LookMiditemUpdatePeopleMessage(Integer itemId);

    /**
     * 获取需要结项审核的项目
     * @return
     */
    CompeletedItermsVO CompeletedIterms();

    /**
     * 结项审核失败详情
     * @param itemId
     * @return
     */
    SubmitCompeletedItemFailureVO LookCompeletedFailure(Integer itemId);

    /**
     * 提交结项报告的基本信息展示
     * @param itemId
     * @return
     */
    SubmitComitemPaperVO submitComitemPaper(Integer itemId);

    /**
     * 准备延期结项申请
     * @param
     * @return
     */
    PrepareDelayitemVO prepareDelayitem(Integer itemId);

    /**
     * 提交延期结项申请
     * @param itemId
     * @param reason
     */
    void submitDelayitem(Integer itemId, String reason);

    /**
     * 延期项目详情
     * @param
     * @return
     */
    DelayItemDetailVO LookDelayitemDetail(Integer itemId);

    /**
     * 准备延期结项中的材料提交
     * @param itemId
     * @return
     */
    PrepareSubmitMaterialVO prepareSubmitMaterial(Integer itemId);

    /**
     * 提交材料
     * @param
     * @return
     */
    void submitMaterial(SubmitMatrialDTO submitMatrialDTO);

    /**
     * 获取需要审核立项申请的项目
     * @return
     */
    ExamineSetupItemsVO getExamineSetupItems();

    /**
     * 准备评分
     * @param itemId
     * @return
     */
    PrepareScoreVO prepareScore(Integer itemId);
    /**
     * 对等待立项审核的项目评分
     * @param examineScoreDTO
     * @return
     */
    void scoreSetupItem(ExamineScoreDTO examineScoreDTO);

    /**
     * 获取需要审核进展记录的项目
     * @return
     */
    ExamineProgressItemsVO getExamineProgressItems();


    /**
     * 需要中期审核的项目
     * @return
     */
    ExamineMidItermsVO getExamineMidterms();

    /**
     * 准备审核中期项目
     * @param itemId
     * @return
     */
    PrepareMiditemVO prepareMiditem(Integer itemId);

    /**
     * 对等待中期审核的项目评分
     * @param examineScoreMidItem
     * @return
     */
    void scoreMidItem(ExamineScoreDTO examineScoreMidItem);

    /**
     * 准备下载文件
     * @return
     */
    DownloadFilesVO prepareDownloadFiles();

    /**
     * 根据格式下载文件
     * @param typeDownloadFileDTO
     * @return
     */
    FileMainsVO downloadFiles(TypeDownloadFileDTO typeDownloadFileDTO);

    /**
     * 需要结项审核的项目
     * @return
     */
    ExamineCompletedItemsVO getCompeletedIterms();

    /**
     * 对等待结项审核的项目评分
     * @param examineScoreDTO
     * @return
     */
    void scoreCompletedItem(ExamineScoreDTO examineScoreDTO);

    /**
     * 对等待延期结项审核的项目评分
     * @param examineScoreDTO
     * @return
     */
    void scoreDelayItem(ExamineScoreDTO examineScoreDTO);

    /**
     * 需要延期结项审核的项目
     * @return
     */
    ExamineDelayItemsVO getDelayitems();
}
